package droidhouseclone;




import java.awt.FlowLayout;
import java.util.Observable;
import java.util.Observer;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;

/**
 *
 * @author Lorenzo Ferri
 */
class PlayStopView extends JPanel implements Observer {

    private JButton bottoneStart;
    private JButton bottoneStop;
    private ButtonsController controller;
    private JLabel progressMinute;
    private JLabel totalMinute;
    private JSlider songSliderBar;
    private int currentMinute;

    public PlayStopView(StateObservable model) {

        setSize(200, 50);

        setLayout(new FlowLayout(FlowLayout.LEFT));

        //Inizializzazione degli attributi
        bottoneStart = new JButton();
        bottoneStop = new JButton();
        songSliderBar = new JSlider();
        progressMinute = new JLabel();
        totalMinute = new JLabel();
        controller = new ButtonsController(model);
        currentMinute = 0;

        //Setto l'identificativo dei comandi d'azione
        bottoneStart.setActionCommand("Start");
        bottoneStop.setActionCommand("Stop");

        //Setto le icone dei bottoni
        bottoneStart.setIcon(new ImageIcon("media-playback-start.png"));
        bottoneStop.setIcon(new ImageIcon("media-playback-stop.png"));

        //Disabilito la possibilità di modifica del bottone stop e della sliderbar
        bottoneStop.setEnabled(false);
        songSliderBar.setEnabled(false);




        //Imposto il valore predefinito dei minuti
        songSliderBar.setValue(currentMinute);
        progressMinute.setText("0:00");
        totalMinute.setText("0:00");

        //Imposto i valori della slider
        songSliderBar.setMajorTickSpacing(1);
        songSliderBar.setMinimum(0);

        //Aggiungo i componenti al pannello
        add(bottoneStart);
        add(bottoneStop);
        add(progressMinute);
        add(songSliderBar);
        add(totalMinute);

        //Aggiungo il listener ai bottoni
        bottoneStart.addActionListener(controller);
        bottoneStop.addActionListener(controller);

        //Aggiungo la classe agli observer
        model.addObserver(this);

    }

    public void update(Observable o, Object arg) {

        //Attributi del metodo
        StateObservable model = (StateObservable) o;
        int sec = 0;
        int min = 0;
        //Controllo lo stato attuale del subject
        switch (model.getState()) {

            case StateObservable.START:
                //disabilito il bottone start abilito lo stop
                this.bottoneStart.setEnabled(false);
                this.bottoneStop.setEnabled(true);
                break;
            case StateObservable.STOP:
                //disabilito il bottone stop abilito lo start
                this.bottoneStart.setEnabled(true);
                this.bottoneStop.setEnabled(false);
                break;
            case StateObservable.CHANGEDURATION:
                currentMinute = 0;
                //Calcolo il valore dei minuti e secondi totali
                sec = (model.getDuration() / 1000) % 60;
                min = (model.getDuration() / 1000) / 60;

                progressMinute.setText("0:00");

                //aggiorno la label
                if (sec < 10) {
                    this.totalMinute.setText("" + min + ":0" + sec);
                } else {
                    this.totalMinute.setText("" + min + ":" + sec);
                }

                //Valore massimo della slider uguale alla durata della canzone
                songSliderBar.setMaximum((model.getDuration() / 1000));
                break;

            case StateObservable.PLAYINGSONG:
                //Setto i secondi ed i minuti correnti
                sec = (int) (model.getSecond() / 1000) % 60;
                min = (int) (model.getSecond() / 1000) / 60;

                if (sec < 10) {
                    this.progressMinute.setText("" + min + ":0" + sec);
                } else {
                    this.progressMinute.setText("" + min + ":" + sec);
                }

                //aggiorno il valore della slider
                songSliderBar.setValue((int) (model.getSecond() / 1000));
                break;

            default:
                break;

        }

    }
}
